/*
  Programa Wifis, 2010-2011
  Autor: Nilhcraiv

This file is part of Wifis.

    Wifis is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    Wifis is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with Wifis.  If not, see <http://www.gnu.org/licenses/>.
*/
#include "save.h"

#include <QMessageBox>
#include <QFileDialog>
#include <QFile>
#include <QDir>
#include <QByteArray>
#include <QChar>

save::save (QWidget *parent) :
    QWidget(parent)
{
}

save::~save()
{

}

void save::guardarRedes(QVector <QString> networks)//En networks, esta toda la informacion de las redes inalambricas.
{
    QString nombre, tabla;
    int elemento = 0;
    nombre.append(QFileDialog::getSaveFileName(this, tr("Guardar redes"),
                                               "redes.rtf",
                                               tr("Texto enriquecido (*.rtf)")));
    if(nombre.isEmpty())
    {
        return;
    }

    if(networks.isEmpty())
    {
        QMessageBox::information(this,"Sin redes","No se han detectado redes inalámbricas, por lo tanto no hay nada que guardar.","Aceptar");
        return;
    }

    for(int i=0;i<networks.size()/10;i++)
    {
        for(int j=0;j<10;j++)
        {
            if(j==9)//If password..
                tabla.append("\\cf2 ");//color rojo

            tabla.append(networks.at(elemento));
            tabla.append("\\line ");
            elemento++;
         }
         tabla.append("\\cf1 ");//color por defecto
     }

    tabla.prepend("{\\colortbl;\\red0\\green0\\blue0;\\red255\\green0\\blue0;}\n\\cf1");
    tabla.prepend("{\\rtf1\\ansi{\\fonttbl\\f0\\fswiss Calibri;}\\deff0\n");
    tabla.append("}");

    QFile file(nombre);

    if(file.open(QIODevice::ReadWrite | QIODevice::Truncate))
    {
       QTextStream text_stream_for_writing(&file);
       text_stream_for_writing << tabla;//escribo todo en el archivo

       QString prueba;
       text_stream_for_writing.seek(0);
       prueba = text_stream_for_writing.readAll();//leo lo que hay escrito, despues de escribir

       if(prueba!=tabla)
       {
           file.close();
           QMessageBox::warning(this,"ĄError! Imposible guardar","No se pudo terminar de escribir el archivo, compruebe que tiene memoria suficiente.");
           QFile::remove(nombre);
           return;
       }
       file.close();

       QMessageBox::information(this,"Redes guardadas","Redes inalámbricas guardadas correctamente en: " + nombre,"Aceptar");
    }
    else//si no se abre el archivo en modo escritura...
    {
       QMessageBox::warning(this,"ĄError!","No se pudo guardar el archivo, esto puede ser debido a:\n"
                            " * Permisos de escritura insuficientes.\n * Un programa esta utilizando un fichero con el nombre que has elegido.");
    }
}//guardarRedes

void save::guardarConfiguracion(QVector<int> config)
{
    QFile *file; QByteArray datos;
    file = new QFile( QDir::homePath() + "\\.configFileWifis" );
    file->open(QIODevice::WriteOnly);

    for(int i=0;i<config.size();i++){
        file->write(datos.setNum(config.at(i))); file->write("\n");}

    file->close();
    delete file;

}//guardarConfiguracion

QVector <int> save::readConfiguration()//Return empty QVector of int, if it can't read configuration file.
{
    QFile *file; QString text; QVector <int> config;

    file = new QFile( QDir::homePath() + "\\.configFileWifis" );

    if(!file->open(QIODevice::ReadOnly)){
        file->close(); delete file; return config;}

    QTextStream textToRead(file);
    textToRead.seek(0);
    text = textToRead.readAll();

    file->close();

    if(text.size()<10){
        delete file; return config;}

    config.push_back(text.at(0).digitValue());
    config.push_back(text.at(2).digitValue());
    config.push_back(text.at(4).digitValue());
    config.push_back(text.at(6).digitValue());
    config.push_back(text.at(8).digitValue());

    text.remove(0,9);
    config.push_back(text.toInt());

    delete file;
    return config;
}//readConfiguration
